package com.webfluxexample.webflux.router;

import com.webfluxexample.webflux.handler.CityHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.server.RequestPredicates;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;

/**
 * 路由器类
 * */
@Configuration
public class CityRouter {

    @Bean
    public RouterFunction<ServerResponse> routeCity(CityHandler cityHandler){
        return
                //请求路由到处理器
                // 跟 Spring MVC 模式下的 HandleMapping 类似。
            RouterFunctions.route(RequestPredicates
                    //将一个 GET 请求 /hello 路由到处理器 cityHandler 的 helloCity 方法上。
                    .GET("/hello")
                    .and(RequestPredicates
                            //参是请求参数和处理函数，如果请求匹配，就调 对应的处理器函数。
                            .accept(MediaType.TEXT_PLAIN)), cityHandler::helloCity);
    }
}
